package com.example.community.dao;

import com.example.community.entity.Message;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @Author: huang
 * @Date: 2021/9/23 9:27
 * @Description:
 */
@Mapper
public interface MessageMapper {

    //查询当前用户的会话列表,针对每个会话只返回一条最新的私信
    List<Message> selectConversations(@Param("userId") int userId,@Param("offset") int offset,@Param("limit") int limit);

    //查询当前用户的会话数量，指给当前用户发送私信的用户数量
    int selectConversationCount(int userId);

    //查询会话所包含的私信列表
    List<Message> selectLetters(@Param("conversationId") String conversationId,@Param("offset") int offset,@Param("limit") int limit);

    //查询会话所包含的私信数量
    int selectLetterCount(String conversationId);

    //查询所有未读私信的数量或与某个会话的未读数量
    int selectLetterUnreadCount(@Param("userId") int userId,@Param("conversationId") String conversationId);

    //发送私信，新增消息
    int insertMessage(Message message);

    //把未读私信变成已读，因为可能有多条私信我们用list
    int updateStatus(@Param("ids") List<Integer> ids,@Param("status") int status);

    //查询某个主题下最新的通知
    Message selectLatestNotice(@Param("userId") int userId,@Param("topic") String topic);

    //查询某个主题所包含的通知数量
    int selectNoticeCount(@Param("userId") int userId,@Param("topic") String topic);

    //查询未读的通知数量
    int selectNoticeUnreadCount(@Param("userId") int userId,@Param("topic") String topic);

    // 查询某个主题所包含的通知列表
    List<Message> selectNotices(@Param("userId") int userId,@Param("topic") String topic,@Param("offset") int offset,@Param("limit") int limit);
}
